﻿using System;

namespace PMS.Data.Entities.Customers
{
    /// <summary>
    /// Represents an external authentication record
    /// </summary>
    public partial class ExternalAuthenticationRecord : BaseEntity
    {
        /// <summary>
        /// Gets or sets the customer identifier
        /// </summary>
        public int CustomerId { get; set; }

        /// <summary>
        /// 第三方授权登录获取到的用户手机号，与Customer表对应ID的用户手机号一致
        /// </summary>
        public string Mobile { get; set; }
        /// <summary>
        /// Gets or sets the external email
        /// </summary>
        public string Email { get; set; }

        /// <summary>
        /// Gets or sets the external identifier
        /// 第三方授权登录获取到的用户唯一标识，与CustomerId一对一绑定。
        /// 如微信授权登录后用户的全局标识为OpenId
        /// 钉钉授权登录后用户在当前开放应用所属企业的唯一标识为UnionId
        /// </summary>
        public string ExternalIdentifier { get; set; }

        /// <summary>
        /// Gets or sets the external display identifier
        /// 第三方授权登录获取到的用户唯一标识名称，
        /// 如微信授权登录后用户的全局标识为OpenId，则ExternalIdentifier字段记录授权获取到的用户OpenId，ExternalIdentifierName字段记录此记录为"OpenId"
        /// 钉钉授权登录后用户的全局标识为UnionId,则ExternalIdentifier字段记录授权获取到的用户UnionId，ExternalIdentifierName字段记录此记录为"UnionId"
        /// </summary>
        public string ExternalIdentifierName { get; set; }

        /// <summary>
        /// Gets or sets the OAuthAccessToken
        /// 第三方授权接口一般要求请求接口携带access_token获取信息数据，而且一般都具有有效期。
        /// 如钉钉接口说明默认access_token的有效期为7200秒，有效期内重复获取，会返回相同的access_token，并自动续期
        /// 根据实际情况不一定都能需要access_token
        /// 如通过钉钉扫码只能获取临时授权码，且只能使用一次，如要使用access_token获取更多用户信息需要创建网页或app应用获取appkey及appsecrectkey
        /// </summary>
        public string OAuthAccessToken { get; set; }

        /// <summary>
        /// 单位: 秒
        /// 详见OAuthAccessToken说明
        /// 各第三方授权接口针对access_token失效时间不一致，
        /// 根据实际情况设置失效时间，最好提前一点(通过程序设定),在失效后重新刷新获取access_token
        /// </summary>
        public int AccessTokenExpiredSeconds { get; set; }

        /// <summary>
        /// Gets or sets the provider
        /// </summary>
        public string ProviderSystemName { get; set; }

        // Not Using
        //public bool IsActive { get; set; }
    }
}
